package com.Oct_Twenty;

/**
 * 606. 根据二叉树创建字符串
 * 给你二叉树的根节点 root ，请你采用前序遍历的方式，将二叉树转化为一个由括号和整数组成的字符串，返回构造出的字符串。
 *
 * 空节点使用一对空括号对 "()" 表示，转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
 *
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/construct-string-from-binary-tree
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * 2022/10/20 23:44
 */

public class Solution606 {


    public String tree2str(TreeNode root) {
        if (root==null) return "()";
        StringBuilder sb=new StringBuilder();
        dfs(root,sb);
        return sb.toString();
    }

    void dfs(TreeNode root,StringBuilder sb){
        if (root!=null)
        {
            sb.append(root.val);
            if (root.left!=null||root.right!=null)
            {
                sb.append("(");
                dfs(root.left,sb);
                sb.append(")");
                if (root.right!=null)
                {
                    sb.append("(");
                    dfs(root.right,sb);
                    sb.append(")");
                }
            }
        }
    }



    public class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode() {}
      TreeNode(int val) { this.val = val; }
      TreeNode(int val, TreeNode left, TreeNode right) {
          this.val = val;
          this.left = left;
          this.right = right;
      }
  }

}
